package com.common.widget;

import android.app.Activity;
import android.app.Dialog;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.TextView;

import com.common.utils.StarAppUtils;
import com.starappallcommon.R;

/**
 * 共通，选择弹出框
 * 
 * <br>
 * Created 2014-5-5 下午2:30:23
 * 
 * @version
 * @author HuangYK
 * 
 * @see
 */
public class CommonSelectWheelDialog extends Dialog {

	/** 标题文字 */
	private TextView mTvTitle;

	/** 滚轮选项控件 */
	private CommonSelectWheelPicker mWdpSelectWheel;

	/** 取消按钮 */
	private Button mBtnCancel;
	/** 确认按钮 */
	private Button mBtnConfirm;

	/** 选择回调 */
	private OnSelectCallback mOnSelectCallback;

	/**
	 * 选择日期对话框回调
	 * 
	 * @ClassName SetBirtydayCallBack
	 * @Function TODO ADD FUNCTION
	 * @Reason TODO ADD REASON
	 * 
	 * @author HuangYK
	 * @version v1.1
	 * @Date 2014-4-21 上午11:20:22
	 * 
	 * @see
	 */
	public interface OnSelectCallback {
		/**
		 * 选中项回调
		 * 
		 * <br>
		 * Created 2014-9-3 下午4:07:11
		 * 
		 * @param selectPosition
		 *            选中的位置，和selectString任选一个使用
		 * @param selectString
		 *            选中的文字，和selectPosition任选一个使用
		 * @author : HuangYK
		 */
		void onSelectData(int selectPosition, String selectString);
	}

	/**
	 * 实例化CommonSelectWheelDialog
	 * 
	 * @param activity
	 *            上下文
	 * @param theme
	 *            主题样式
	 */
	public CommonSelectWheelDialog(Activity activity, int theme) {
		super(activity, theme);
		setContentView(R.layout.common_select_wheel_dialog);
		initView();
		initEvent();
	}

	/**
	 * 初始化视图
	 * 
	 * <br>
	 * Created 2014-9-3 下午3:52:40
	 * 
	 * @author : HuangYK
	 */
	private void initView() {
		// 设置对话框横向充满，垂直自适应并居中
		Window mWindow = this.getWindow();
		mWindow.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		mWindow.setGravity(Gravity.CENTER);

		mTvTitle = (TextView) findViewById(R.id.tv_title);
		mWdpSelectWheel = (CommonSelectWheelPicker) findViewById(R.id.wdp_select_wheel);

		mBtnCancel = (Button) findViewById(R.id.btn_cancel);
		mBtnConfirm = (Button) findViewById(R.id.btn_confirm);
		initTypeface();
	}

	/**
	 * 设置字体
	 * 
	 * <br>
	 * Created 2014-9-3 下午4:17:55
	 * 
	 * @author : HuangYK
	 */
	private void initTypeface() {
		StarAppUtils.setViewTypeFace(mTvTitle, true);
		StarAppUtils.setViewTypeFace(mBtnCancel, true);
		StarAppUtils.setViewTypeFace(mBtnConfirm, true);
	}

	/**
	 * 初始化操作事件监听
	 * 
	 * <br>
	 * Created 2014-9-3 下午4:09:53
	 * 
	 * @author : HuangYK
	 */
	private void initEvent() {
		mBtnCancel.setOnClickListener(mOnClickListener);
		mBtnConfirm.setOnClickListener(mOnClickListener);
	}

	/**
	 * 按钮点击事件监听
	 */
	private View.OnClickListener mOnClickListener = new View.OnClickListener() {

		@Override
		public void onClick(View v) {
			final int vId = v.getId();
			// 取消按钮操作
			if (vId == R.id.btn_cancel) {
				cancel();
				return;
			}
			// 确认按钮操作
			if (vId == R.id.btn_confirm) {
				if (mOnSelectCallback != null) {
					mOnSelectCallback.onSelectData(
							mWdpSelectWheel.getCurItemPosition(),
							mWdpSelectWheel.getCurItemString());
				}
				cancel();
				return;
			}
		}
	};

	/**
	 * 设置对话框标题文字
	 * 
	 * <br>
	 * Created 2014-9-3 下午3:53:41
	 * 
	 * @param strResId
	 *            标题文字资源ID
	 * @author : HuangYK
	 */
	public void setTitleText(int strResId) {
		mTvTitle.setText(strResId);
	}

	/**
	 * 设置对话框标题文字
	 * 
	 * <br>
	 * Created 2014-9-3 下午3:53:41
	 * 
	 * @param strTitle
	 *            标题文字
	 * @author : HuangYK
	 */
	public void setTitleText(String strTitle) {
		mTvTitle.setText(strTitle);
	}

	/**
	 * 设置选项数据
	 * 
	 * <br>
	 * Created 2014-9-3 下午3:54:57
	 * 
	 * @param options
	 *            选项数据
	 * @param curItem
	 *            默认选中项
	 * @author : HuangYK
	 */
	public void setOptions(String[] options, int curItem) {
		mWdpSelectWheel.setOptions(options, curItem);
	}

	/**
	 * 设置选项数据
	 * 
	 * <br>
	 * Created 2014-9-3 下午3:54:57
	 * 
	 * @param options
	 *            选项数据
	 * @param curOption
	 *            默认选中项
	 * @author : HuangYK
	 */
	public void setOptions(String[] options, String curOption) {
		if (options == null) {
			return;
		}
		int length = options.length;
		if (length <= 0) {
			return;
		}
		int curItem = 0;

		for (int i = 0; i < length;) {
			if (options[i].equals(curOption)) {
				curItem = i;
				break;
			}
		}
		mWdpSelectWheel.setOptions(options, curItem);
	}

	/**
	 * 设置选择结果回调
	 * 
	 * <br>
	 * Created 2014-9-3 下午4:31:40
	 * 
	 * @param onSelectCallback
	 *            选择结果回调
	 * @author : HuangYK
	 */
	public void setOnSelectCallback(OnSelectCallback onSelectCallback) {
		mOnSelectCallback = onSelectCallback;
	}
}
